from rest_framework.views import exception_handler
from libs.luffy_response import LuffyResponse
from logging import getLogger

logger = getLogger("django")  # 参数是配置文件中的 loggers 的值


def luffy_exception_handler(exc, context):
    """luffy专用异常处理器"""
    # 先调用 rest_framework 的异常处理器，以获取标准的异常
    ret = exception_handler(exc, context)

    # 记录日志
    # 获取抛出异常的视图类的名称
    view_name = context['view'].__class__.__name__
    logger.error(f"视图{view_name}出现了异常：{str(exc)}")

    # 如果 exception_handler 处理不了就手动处理
    if ret is None:
        return LuffyResponse(code=5000, msg=str(exc))
    else:
        return LuffyResponse(code=5000, data=ret.data)
